A virtual machine (VM) is a software abstraction, or “virtualization,” of an actual physical computer system. Each VM typically mimics the general structure of a physical computer and as such will usually have both virtual system hardware and guest system software. The virtual system hardware typically includes at least one virtual CPU, virtual memory, at least one storage device, such as a virtual disk, and one or more virtual devices. All of the virtual hardware components of the VM can be implemented in software to emulate corresponding physical components. The guest system software typically includes a guest operating system and drivers as needed.
Frequently, rather than creating a new virtual machine from scratch by allocating resources, loading and booting an operating system, and then loading and starting guest applications, system administrators find it useful to start up new operational virtual machines that are copies (or clones) of existing virtual machines that are already either running or powered off. To start up a virtual machine in this way, a process typically starts with the creation of a new virtual machine on a suitable host that is a copy of an existing source virtual machine. To clone the contents of an existing source virtual machine, a “snapshot” of the source machine file system is taken, typically with the aid of software residing on the source machine. The snapshot provides an image of the complete state of the source machine file system at a moment in time. To clone a powered off virtual machine, a snapshot is not required.
In order for a new VM to be a copy of a source machine, it is cloned to storage associated with the new virtual machine. After cloning has been completed, the operating system of the new VM may be loaded and booted, and specific applications of the new VM may be loaded and started. There are many ways of performing this cloning operation. In a typical computing environment, the new VM is connected to the source machine over a network, and the data are transferred over that network. The VM storage can be local (such as all or a portion of a disk drive attached directly to the physical machine which hosts the VM), or it can be located remotely, for example, in a Storage Area Network (SAN) accessible from the VM. Regardless of the specific hardware and software details, the cloning operation can take a considerable amount of time. The amount of time will vary according to the implementation details, the resulting average data transfer rates, and the size of the source machine file system that must be transferred. For typical machines and networks in common use in 2008, the size of the source file system can be 50 GB or more, and typical average data transfer rates can be about 20 MB/s. Thus, a complete cloning operation can take at least 2500 seconds or about 40 minutes. Significantly longer times are not uncommon, especially for servers running data-intensive applications that can have much larger file systems.
While a cloning operation executes, the clone of the virtual machine that is being created cannot be started. Indeed, the virtual machine clone becomes usable only after the cloning operation completes. The delay from when a virtual machine clone is requested to the time the virtual machine is fully cloned can be costly in a production environment, where cloned deployments of virtual machines are requested frequently and often unexpectedly. In many environments, when a cloned virtual machine deployment is requested, there is often a need for the virtual machine clone to become operational almost immediately. Therefore, a need has arisen for a way of cloning virtual machines rapidly.